﻿package com.eitb.plantillas {
	import flash.net.*;
	import flash.geom.*;
	import flash.utils.*;
	import flash.events.*;
	import flash.display.*;
	import com.eitb.formaters.*;
	import com.eitb.factorias.*;
	import com.eitb.plantillas.*;
	import com.eitb.cargadores.*;
	import com.eitb.literales.*;
	import com.eitb.rutas.*;
//	import com.eitb.programas.menu.utils.*;	
	
	public class ModeloPlantillaMultimedia implements IControladorPlantilla, IControladorPlantillaMultimedia, IControladorCargador {
		private var vPlantilla:IVistaPlantilla;
		private var vPlantillaMultimedia:IVistaPlantillaMultimedia;
		private var vCargador:IVistaCargador;
		
		private var imagenesXml:XMLList;
		private var textosXml:XMLList;
		private var cargando:Boolean;
		private var nImagen:int;		
		private var enlaceUrl:URLRequest;
		
		private var nElementos:int;		
		private var nElementosTotales:int;
		private var idioma:int;
		
		private var literalesCargador:ILiterales;
		private var literalesEnlace:ILiterales;		
		
		public function ModeloPlantillaMultimedia():void {
			this.cargando = false;
			this.nImagen = 0;
			this.nElementos = 0;
		}
		
		public function initIdioma(idioma:int):void {
			this.idioma = idioma;
		}
		
		public function initVistaPlantilla(vPlantilla:IVistaPlantilla):void {
			this.vPlantilla= vPlantilla;
		}				
		
		public function initVistaPlantillaMultimedia(vPlantillaMultimedia:IVistaPlantillaMultimedia):void {
			this.vPlantillaMultimedia = vPlantillaMultimedia;
		}		
		
		public function initVistaCargador(vCargador:IVistaCargador):void {
			this.vCargador = vCargador;
		}				
		
		public function initLiteralesCargador(literales:ILiterales):void {
			this.literalesCargador = literales;
		}
		
		public function initLiteralesEnlace(literales:ILiterales):void {
			this.literalesEnlace = literales;
		}		
		
		public function initTextos(textosXml:XMLList):void {
			this.textosXml=textosXml;
			this.vPlantillaMultimedia.setTextos(textosXml);
		}
		
		public function initEnlaceUrl(url:URLRequest):void {
			this.enlaceUrl = url;
			if (null != url) {
				this.vPlantillaMultimedia.setEnlaceVisible(true);				
				this.vPlantillaMultimedia.setEnlaceUrl(url);
				this.vPlantillaMultimedia.setEnlaceText(this.literalesEnlace.getLiteral(EnlaceLiterales.PULSAR));
			} else {
				this.vPlantillaMultimedia.setEnlaceVisible(false);
			}
		}		
		
		public function initImagenes(imagenesXml:XMLList):void {
			this.imagenesXml=imagenesXml;
		}		
		
		// CARGADOR
		public function addElementos(numero:int):void {
			this.nElementos += numero;
		}
		public function removeElementos(numero:int):void {
			this.nElementos -= numero;
		}
		private function setCargadorInfo(porcentaje:Number):void {
			this.vCargador.setCargadorContador(new PercentFormater(porcentaje).format(this.idioma));	
			this.vCargador.setCargadorProgress(porcentaje);			
			this.vCargador.setCargadorVisible(porcentaje != 1);
		}		
		// CARGADOR
		
		// CARGAR IMAGENES
		public function loadImagenes():void {
			if (!this.cargando && null != this.imagenesXml) {
				var loader:Loader;
				this.nElementosTotales = this.imagenesXml..imagen.length();
				for each (var imagen in this.imagenesXml..imagen) {
					loader=new Loader();
					this.configureListeners(loader.contentLoaderInfo);
					try {
						loader.load(new Rutas().getRutaImagen(imagen));
					} catch (error:Error) {
						trace("Unable to load requested document.");
					}
				}
			}
		}		
	
		private function completeHandler(event:Event):void {
			var loader:Loader=Loader(event.target.loader);
			var bitmap:Bitmap=Bitmap(loader.content);
			bitmap.cacheAsBitmap=true;
			bitmap.width = this.vPlantillaMultimedia.getImagenWidth(this.nImagen);
			bitmap.height = this.vPlantillaMultimedia.getImagenHeight(this.nImagen);
			this.vPlantillaMultimedia.setImagenBitmap(this.nImagen, bitmap);
			this.nImagen+= 1;
			this.addElementos(1);
			this.setCargadorInfo(this.nElementos / this.nElementosTotales);
		}
		private function openHandler(event:Event):void {
			this.cargando=true;
			this.setCargadorInfo(0);
		}
		
		private function progressHandler(event:ProgressEvent):void {
			this.setCargadorInfo(event.bytesLoaded / event.bytesTotal);
		}

		private function configureListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE,completeHandler);
			dispatcher.addEventListener(Event.OPEN,openHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS,progressHandler);
		}			
		// CARGAR IMAGENES
	}
}